home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / ov143b.zip / OVSELECT.C < prev    next >
C/C++ Source or Header  |  1993-01-04  |  7KB  |  215 lines

  1. /*  009  23-May-87  ovselect.c
  2.  
  3.         Copyright (c) 1987 by Blue Sky Software.  All rights reserved.
  4. */
  5.  
  6. #include "ov.h"
  7. #include "overr.h"
  8. #include "menu.h"
  9. #include "direct.h"
  10.  
  11. extern MENU top_file_menu[], *top_menu;
  12.  
  13. int selatr_quit();
  14. int selatr_set(), selatr_a(), selatr_d(), selatr_h(), selatr_r(), selatr_s();
  15.  
  16. MENU top_selatr_menu[] = {
  17.    { "Enter", "Change the selection attributes as shown", selatr_set, top_file_menu },
  18.    { "Archive", "Toggle selection of entries with Archive attribute", selatr_a, NULL },
  19.    { "Dir", "Toggle selection of directory entries", selatr_d, NULL },
  20.    { "Hidden", "Toggle selection of entries with Hidden attribute", selatr_h, NULL },
  21.    { "Read/only", "Toggle selection of entries with Read/Only attribute", selatr_r, NULL },
  22.    { "System", "Toggle selection of entries with System attribute", selatr_s, NULL },
  23.    { "Quit", "Don't change the current selection attributes", selatr_quit, top_file_menu },
  24.    { NULL, NULL, NULL, NULL }
  25. };
  26.  
  27. static unsigned char selatr_to_set;
  28.  
  29. extern WINDOW cw;
  30. extern FILE_ENT files[];
  31. extern char *none_tagged;
  32. extern unsigned char restricted;
  33.  
  34. char *strupr();
  35.  
  36.  
  37. /****************************************************************************
  38.                            S E L _ A T T R I B
  39.  ****************************************************************************/
  40.  
  41. sel_attrib() {         /* set the selection attributes */
  42.  
  43.    top_menu = top_selatr_menu; /* setup the select attrib menu as main menu */
  44.  
  45.    restricted = TRUE;          /* disable cursor movement, etc */
  46.  
  47.    selatr_to_set = cw.selatrs; /* initial attribs to select */
  48. }
  49.  
  50.  
  51. /*****************************************************************************
  52.                             S E L A T R _ S E T
  53.  *****************************************************************************/
  54.  
  55. selatr_set() {         /* set the selection attributes as show */
  56.  
  57.    cw.selatrs = selatr_to_set;         /* assign selection attributes */
  58.  
  59.    renew_window();                     /* reget/display files */
  60.  
  61.    selatr_quit();                      /* back to normal display mode */
  62. }
  63.  
  64.  
  65. /*****************************************************************************
  66.                           S E L A T R _ Q U I T
  67.  *****************************************************************************/
  68.  
  69. selatr_quit() {        /* exit back to normal file display mode */
  70.  
  71.    top_menu = top_file_menu;   /* restore file menu as main */
  72.  
  73.    restricted = FALSE;         /* enable all commands */
  74. }
  75.  
  76.  
  77. /*****************************************************************************
  78.                              S E L A T R _ x
  79.  *****************************************************************************/
  80.  
  81. selatr_a() {           /* toggle selection archive attribute */
  82.  
  83.    selatr_toggle(ARCHIVE);
  84. }
  85.  
  86. selatr_d() {           /* toggle selection dir attribute */
  87.  
  88.    selatr_toggle(DIR);
  89. }
  90.  
  91. selatr_h() {            /* toggle selection hidden attribute */
  92.  
  93.    selatr_toggle(HIDDEN);
  94. }
  95.  
  96. selatr_r() {           /* toggle selection read/only attribute */
  97.  
  98.    selatr_toggle(RDONLY);
  99. }
  100.  
  101. selatr_s() {           /* toggle selection system attribute */
  102.  
  103.    selatr_toggle(SYSTEM);
  104. }
  105.  
  106.  
  107. /*****************************************************************************
  108.                           S E L A T R _ T O G G L E
  109.  *****************************************************************************/
  110.  
  111. selatr_toggle(at)      /* toggle the state of the passed attribute */
  112. int at;
  113. {
  114.    selatr_to_set ^= at;                /* toggle the attribute */
  115.  
  116.    gotorc(MASK_ROW+1,MASK_COL-1);      /* then redisplay the current settings */
  117.    disp_attrib(selatr_to_set);
  118.  
  119.    if (at == DIR)                      /* disp_attrib() doesn't do dirs */
  120.       disp_str(selatr_to_set & DIR ? " D" : " .");
  121. }
  122.  
  123.  
  124. /*****************************************************************************
  125.                             S E L _ A L L
  126.  *****************************************************************************/
  127.  
  128. sel_all() {            /* select everything in directory */
  129.  
  130.    cw.selatrs = ARCHIVE | DIR | HIDDEN | RDONLY | SYSTEM;
  131.  
  132.    mask_off();                 /* clear selection mask and renew window */
  133. }
  134.  
  135.  
  136. /*****************************************************************************
  137.                             S E T _ M A S K
  138.  *****************************************************************************/
  139.  
  140. set_mask() {           /* set the file selection mask */
  141.  
  142.    char *mask;
  143.  
  144.    mask = strupr(prompt(NULL,"Enter Selection Mask: ",NULL,0,MASK_LEN));
  145.    if (strlen(mask) == 0)
  146.       return;
  147.  
  148.    strcpy(cw.mask,mask);               /* copy new mask to window */
  149.  
  150.    renew_window();                     /* renew the window */
  151. }
  152.  
  153.  
  154. /*****************************************************************************
  155.                             C L R _ M A S K
  156.  *****************************************************************************/
  157.  
  158. clr_mask() {           /* clear the file selection mask */
  159.  
  160.    int ans;
  161.  
  162.    ans = ask("Clear the selection mask? (y/N): ");
  163.    if (yes(ans))
  164.       mask_off();                      /* wipe out the mask */
  165. }
  166.  
  167.  
  168. /*****************************************************************************
  169.                          M A S K _ O F F
  170.  *****************************************************************************/
  171.  
  172. static int
  173. mask_off() {           /* force the selection mask off */
  174.  
  175.    *cw.mask = '\0';                 /* wipe out the mask */
  176.    cw.maskcmp = 1;                  /* mask means include next time */
  177.    renew_window();                  /* update the file display */
  178. }
  179.  
  180. /*****************************************************************************
  181.                        I N V E R T _ M A S K
  182.  *****************************************************************************/
  183.  
  184. invert_mask() {        /* invert the include/exclude meaning of the mask */
  185.  
  186.    cw.maskcmp ^= 1;    /* invert the flag */
  187.    renew_window();     /* update the file display */
  188. }
  189.  
  190.  
  191. /*****************************************************************************
  192.                          S E L _ T A G G E D
  193.  *****************************************************************************/
  194.  
  195. sel_tagged() {         /* "Select" the tagged files */
  196.  
  197.    register int i;
  198.    register struct file_ent *fp;
  199.  
  200.    if (cw.num_tagged == 0)             /* are there any tagged files? */
  201.       show_error(0,NONE_TAGGED,1,none_tagged);
  202.  
  203.    /* to select the tagged files, we delete every files[] that isn't tagged,
  204.       note that the file isn't deleted, just the files[] entry */
  205.  
  206.    for (i = 0, fp = files; i < cw.nfiles; i++, fp++)
  207.       if (!(fp->flags & TAGGED))
  208.          delent(fp);
  209.  
  210.    disp_file_stats();                  /* disp updated file stats */
  211.    packfiles();                        /* pack the files structure */
  212.    adjust_window();                    /* redisplay window */
  213.    update_window(1);
  214. }
  215.